package ar.uade.distribuidas.tpo.dba.dao;

import java.util.LinkedList;
import java.util.List;

import org.hibernate.Session;

import ar.uade.distribuidas.tpo.base.dominiodto.EstadoRemito;
import ar.uade.distribuidas.tpo.dba.dominio.ItemPedido;
import ar.uade.distribuidas.tpo.dba.dominio.ItemRemito;
import ar.uade.distribuidas.tpo.dba.dominio.Remito;
import ar.uade.distribuidas.tpo.dba.hbt.HibernateDAO;

public class RemitoDAO extends HibernateDAO {

	public static RemitoDAO instancia;

	public RemitoDAO() {
		super();
	}

	public static RemitoDAO getInstancia() {
		if (instancia == null) {
			instancia = new RemitoDAO();
		}
		return instancia;
	}

	public int getLastNumber() {
		int r = (int) this.getSession().createQuery("select COALESCE(MAX(numero), 0) from Remito").uniqueResult();
		return r;
	}

	public List<Remito> getRemitosEmitidos(long cuilCliente) {
		@SuppressWarnings("unchecked")
		List<Remito> lista = (List<Remito>) this.getSession()
				.createQuery("from Remito r where r.cliente.cuil = :cuil and r.estado = :estado")
				.setParameter("cuil", cuilCliente).setParameter("estado", EstadoRemito.EMITIDO).list();

		return lista;
	}
	
	public List<ItemRemito> getItemsRemitoByItemsPedido(List<Long> idsItemsPed){
		
		
		@SuppressWarnings("unchecked")
		List<ItemRemito> lista = (List<ItemRemito>) getSession().createQuery("from ItemRemito r where r.itemPedido.id IN (:ids)")
				.setParameterList("ids",idsItemsPed).list();

		return lista;
		
	}

}
